package yiran.agift.command;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class AGiftTabCompleter implements TabCompleter {

    private static final List<String> SUBCOMMANDS = Arrays.asList(
            "create", "edit", "give", "sendmail", "delete", "reload", "view", "help"
    );

    /**
     * 提供命令的Tab补全功能
     * 当玩家输入命令并按下Tab键时，此方法将被调用，用于提供可能的命令补全选项
     *
     * @param sender 命令发送者，可以是玩家或控制台
     * @param command 被执行的命令对象
     * @param alias 命令的别名，可能是命令执行时使用的名字
     * @param args 命令的参数数组
     * @return 返回一个字符串列表，包含所有可能的补全选项
     */
    @Override
    public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
        final List<String> completions = new ArrayList<>();
        // 当只有一个参数时，尝试补全子命令
        if (args.length == 1) {
            StringUtil.copyPartialMatches(args[0], SUBCOMMANDS, completions);
        } else if (args.length == 2) {
            String subCommand = args[0].toLowerCase();
            // 根据不同的子命令提供不同的补全选项
            switch (subCommand) {
                case "give":
                case "sendmail":
                    // 列出所有在线玩家的名字作为补全选项
                    for (Player player : Bukkit.getOnlinePlayers()) {
                        if (StringUtil.startsWithIgnoreCase(player.getName(), args[1])) {
                            completions.add(player.getName());
                        }
                    }
                    break;
                case "edit":
                case "delete":
                case "view":
                    // 如果参数为空，则提示用户输入礼包ID
                    if (args[1].isEmpty()) {
                        completions.add("<礼包ID>");
                    }
                    break;
            }
        } else if (args.length == 3) {
            String subCommand = args[0].toLowerCase();
            // 对于特定的子命令，提供礼包ID的补全提示
            if ("give".equals(subCommand) || "sendmail".equals(subCommand)) {
                if (args[2].isEmpty()) {
                    completions.add("<礼包ID>");
                }
            }
        }
        // 对补全选项进行排序
        Collections.sort(completions);
        return completions;
    }

}
